import createElement from './creatElement.js';
import vnode from './vnode.js';
import patchVnode from './patchVnode.js'

export default function patch(oldVnode, newVnode) {
  console.log(oldVnode, newVnode);
  // 判断老结点是虚拟结点还是Dom结点，如果是dom结点则包装成虚拟结点
  if (oldVnode.sel === '' || oldVnode.sel === undefined) {
    oldVnode = vnode(oldVnode.tagName.toLowerCase(), {}, [], undefined, oldVnode)
      // console.log(oldVnode, newVnode)
  }
  // 判断 oldVnode和newVnode 是不是同一个节点
  if (oldVnode.key === newVnode.key && oldVnode.sel === newVnode.sel) {
    console.log('是同一个节点')
      // 进行精细化比较
    patchVnode(oldVnode, newVnode)
  } else {
    // console.log(oldVnode, newVnode);
    console.log('不是同一个节点')
      // 暴力拆除，重新插入
    let newVnodeElm = createElement(newVnode)
    if (oldVnode.elm && newVnodeElm) {
      // 如果老结点存在并且新结点也存在，那么新结点插入老结点之前， oldVnode.elm就是标杆
      oldVnode.elm.parentNode.insertBefore(newVnodeElm, oldVnode.elm)
    }
    // 删除老节点
    oldVnode.elm.parentNode.removeChild(oldVnode.elm)
  }
}